package cn.sunflyer.simpnk.control;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;

/**
 * 配置文件控制器
 * @version 1.5.0
 * @author CrazyChen
 * @since Simple Netkeeper 1.5.0
 * */
public class ConfigController {
	
	/**
	 * 配置文件私有变量
	 * */
	private static Properties gPro = null ;
	
	/**配置文件版本号*/
	private static int gProVersion = 6;
	
	/**
	 * 获取已读取的配置文件的版本，如果版本为-1则表示读取失败
	 * */
	public static int getConfigVersion(){
		return gProVersion;
	}
	
	/**
	 * 返回对应参数名称的配置数值<br>
	 * 如果对应配置不存在，返回null
	 * */
	public static String getConfig(String szConfigName){
		return (gPro!=null && !gPro.isEmpty()) ? (gPro.getProperty(szConfigName) == null ? "" : gPro.getProperty(szConfigName)) : "";
	}
	
	/**
	 * 返回对应配置的整形数值<br>
	 * 如果数据无效，返回设置的默认值
	 * @param szConfigName 参数名称
	 * @param defVal 返回的默认值
	 * */
	public static int getConfig(String szConfigName,int defVal){
		if(szConfigName != null && !szConfigName.equals("")){
			try{
				return Integer.parseInt(ConfigController.getConfig(szConfigName));
			}catch(Exception e){
				Log.log("尝试获取的参数无效");
			}
		}
		return defVal;
	}
	
	/**
	 * 返回参数对应的布尔类型<br>
	 * 如果获取到的参数与指定值相同，则返回true，否则返回false。<br>
	 * 如果获取对应值失败，返回默认值
	 * @param szConfigName 配置名称
	 * @param szCompareData 对比值
	 * @param defVal 返回的默认值
	 * */
	public static boolean getConfig(String szConfigName, String szCompareData,boolean defVal ){
		if(szConfigName != null && !szConfigName.equals("")){
			String pConfig  =  getConfig(szConfigName);
			return pConfig == null ? szCompareData == null : pConfig.equals(szCompareData);
		}
		return defVal;
	}
	
	/**
	 * 对特定参数设置配置数值
	 * @param szConfigName 配置项目名称
	 * @param szConfigVal 配置项目数值
	 * @return 如果设置可用，返回true，否则返回false
	 * */
	public static boolean updateConfig(String szConfigName,String szConfigVal){
		if(gPro!=null && szConfigName!=null && szConfigVal!=null && !szConfigName.equals("")){
			gPro.setProperty(szConfigName, szConfigVal);
			
			return true;
		}
		return false;
	}
	
	/**
	 * 保存配置文件
	 * @param szFileName 配置文件名称
	 * */
	public static boolean saveConfig(String szFileName){
		StatusController.saveConfig();
		
		if(gPro!=null && !gPro.isEmpty()){
			try {
				updateConfig(Config_Application_ConfVer, Config_Application_CurrentVersion);
				gPro.store(new FileOutputStream(new File(szFileName)), Config_Comment);
				return true;
			}	catch (IOException e) {
				Log.logE(e);
			}
		}
		return false;
	}
	
	/**
	 * 将配置文件读取到类中
	 * @param szFileName 文件名
	 * */
	public static boolean loadConfig(String szFileName){
		if(szFileName!=null && !szFileName.equals("")){
			File pConfigFile = new File(szFileName);
			if(pConfigFile.exists()){
				gPro = new Properties();
				try {
					gPro.load(new FileInputStream(pConfigFile));
					if(!gPro.isEmpty()){
						String pConVer = gPro.getProperty(Config_Application_ConfVer);
						
						if(pConVer != null){
							gProVersion = Integer.parseInt(pConVer);
							return true;
						}
					}				
				} catch (Exception e) {
					Log.logE(e);
				}
			}				
		}
		gPro = new Properties();
		
		return false;
	}
	
	/**
	 * 保存到默认的配置文件中
	 * */
	public static boolean saveConfig(){
		return saveConfig(CONFIG_FILE);
	}
	
	/**
	 * 读取默认配置文件
	 * */
	public static boolean loadConfig(){
		return loadConfig(CONFIG_FILE);
	}
	
	/**
	 * 删除配置文件私有方法。
	 * */
	private static boolean removeConfigFile(String szFileName){
		if(szFileName!=null && !szFileName.equals("")){
			File pFile = new File(szFileName);
			if(pFile.exists()){
				return pFile.delete();
			}
			return true;
		}
		return false;
	}
	
	/**
	 * 清空配置文件
	 * */
	public static boolean clearConfig(){
		if(gPro!=null){
			gPro.clear();
			removeConfigFile(CONFIG_FILE);
			return gPro.isEmpty();
		}
		return true;
	}
	
	//========================================================================
			//注释
			private static final String Config_Comment = "Simple Netkeeper For Router User Configuaration Files\nAutomatic Generated By Simple Netkeeper";
	
			//配置文件项目名称
			public static final String Config_Application_DefaultMenu="AppDefaultMenu";
			//路由器面板数据
			public static final String Config_Acc_Name="AccName";
			public static final String Config_Acc_Password="AccPassword";
			public static final String Config_Router_IP="RouterIP";
			public static final String Config_Router_Name="RouterAdmin";
			public static final String Config_Router_Password="RouterPassword";
			public static final String Config_Router_AuthMethod="AuthMethod";
			public static final String Config_Router_DialMode="DialMode";
			public static final String Config_Router_DialPlace="DialPlace";
			public static final String Config_Router_Encrypt="Encrypt";
			public static final String Config_Router_Manufactor="Manufactor";
			
			private static final String Config_Application_ConfVer="ConfigVersion";
			//拨号面板数据
			public static final String Config_Dial_Acc_Name="DialAccName";
			public static final String Config_Dial_Acc_Password="DialAccPassword";
			public static final String Config_Dial_is_Rem="DialAccRem";
			public static final String Config_Dial_is_HeartBeat="DialHeartBeat";
			public static final String Config_Dial_is_AutoDial="DialAuto";
			//无线热点数据
			public static final String Config_Wifi_SSID="WifiSSID";
			public static final String Config_Wifi_Password="WifiPassword";
			//自定义配置文件库
						
			
			//配置文件版本变更请修改此项
			public static final String Config_Application_CurrentVersion="6";
			
			//========================================================================	
			public static final String CONFIG_FILE = "SimpleNetkeeper.conf";
}
